src := $(wildcard ./src/*.cpp) # 获取当前目录下src文件夹中所有.cpp文件的列表
obj := $(patsubst %.cpp,%.o,$(src)) # 将所有.cpp文件替换为.o文件，并保存在obj变量中

myArgs := -Wall -Wextra -g # 定义一些编译器警告和调试选项
inc_path := ./include # 头文件所在的目录

# 定义一个伪目标ALL，其依赖于a.out
ALL: a.out

# 定义a.out的依赖为所有.o文件
a.out: $(obj)
# 使用g++命令将所有.o文件编译成a.out   C语言就用gcc         $^：.o依赖
	g++ $^ -o $@ $(myArgs) 

# 定义.o文件依赖于对应的.cpp文件
%.o: %.cpp
# 使用g++命令将.cpp文件编译成.o文件   C语言就用gcc         $<：.c依赖
	g++ -c $< -o $@ $(myArgs) -I$(inc_path) 

# 定义一个伪目标clean，用于清理生成的文件
clean:
# 删除所有.o文件和a.out文件
	rm -rf $(obj) a.out 

# 声明伪目标，以确保它们始终被执行
.PHONY: clean ALL
